//1. the value of a function name
//2. the address of a function name
//they are equivalent
//the value of the function name is the address of where it is
//Therefore, add1(i) == (&add)(i)

#include <cstdio>
using namespace std;
void add1(int& c)
{
  c+=1;
}

int main()
{
  int i = 9;
  printf("%#X\n",add1);
  printf("%p\n",add1);
  printf("%p\n",&add1);

  add1(i);printf("%d\n",i);
  (&add1)(i);printf("%d\n",i);
  return 0;
}
